// profile.js
const app = getApp()

Page({
  data: {
    userInfo: {
      nickName: '用户昵称',
      avatarUrl: '',
      role: 'member'
    },
    currentRole: 'member', // Simplified: removed modal/invite code states
    showEditModal: false,
    tempAvatarUrl: '',
    tempNickname: '',
    showGlobalLoginModal: false,
    modalStable: false // 新增：用于控制弹框的稳定性
  },

  onLoad() {
    console.log('个人中心页面加载')
    
    // 获取用户信息
    const app = getApp()
    if (app.globalData.userInfo) {
      // 确保用户信息包含积分和安排数量
      const userInfo = {
        ...app.globalData.userInfo,
        points: app.globalData.userInfo.points || 0,
        orders: this.getUserOrderCount() // 只计算当前用户的安排数量
      }
      
      console.log('从全局数据加载用户信息:')
      console.log('- 完整用户信息:', userInfo)
      console.log('- 用户名字段:', userInfo.nickname)
      console.log('- 其他可能的用户名字段:', {
        nickName: userInfo.nickName,
        name: userInfo.name,
        userName: userInfo.userName
      })
      
      this.setData({
        userInfo: userInfo,
        currentRole: userInfo.role || app.globalData.userRole || 'member'
      })
    } else {
      // 从本地存储获取
      const userInfo = wx.getStorageSync('userInfo')
      const userRole = wx.getStorageSync('userRole')
      if (userInfo) {
        // 确保用户信息包含积分和安排数量
        const safeUserInfo = {
          ...userInfo,
          points: userInfo.points || 0,
          orders: 0 // 本地存储可能没有安排数据
        }
        
        console.log('从本地存储加载用户信息:')
        console.log('- 完整用户信息:', safeUserInfo)
        console.log('- 用户名字段:', safeUserInfo.nickname)
        console.log('- 其他可能的用户名字段:', {
          nickName: safeUserInfo.nickName,
          name: safeUserInfo.name,
          userName: safeUserInfo.userName
        })
        
        this.setData({
          userInfo: safeUserInfo,
          currentRole: safeUserInfo.role || userRole || 'member'
        })
      }
    }
  },

  onShow() {
    // 页面显示时刷新用户信息
    const app = getApp()
    if (app.globalData.userInfo) {
      // 确保用户信息包含积分和订单数量
      const userInfo = {
        ...app.globalData.userInfo,
        points: app.globalData.userInfo.points || 0,
        orders: this.getUserOrderCount() // 只计算当前用户的订单数量
      }
      
      this.setData({
        userInfo: userInfo,
        currentRole: userInfo.role || app.globalData.userRole || 'member'
      })
      
      // 尝试刷新积分数据
      this.refreshUserPoints()
      
      // 尝试刷新用户信息
      this.refreshUserInfo()
    }

    // 监听全局登录弹框状态
    this.setData({
      showGlobalLoginModal: app.globalData.showGlobalLoginModal
    })

    // 设置事件监听
    this.setupEventListeners()
    
    // 初始化TabBar页面（检查并应用等待中的图标配置）
    app.initTabBarPage()
  },

  // 获取当前用户的安排数量
  getUserOrderCount() {
    const app = getApp()
    const currentUserId = app.globalData.userInfo?._id
    
    if (!currentUserId) {
      console.log('用户ID不存在，返回0个安排')
      return 0
    }
    
    const orders = app.globalData.orders || []
    const userOrders = orders.filter(order => order.userId === currentUserId)
    
    console.log('计算用户安排数量:')
    console.log('- 当前用户ID:', currentUserId)
    console.log('- 总安排数:', orders.length)
    console.log('- 用户安排数:', userOrders.length)
    
    return userOrders.length
  },

  // 刷新用户积分
  async refreshUserPoints() {
    const app = getApp()
    if (app.globalData.userInfo && app.globalData.userInfo._id) {
      try {
        await app.loadUserPointsFromCloud()
        
        // 更新页面数据
        if (app.globalData.userInfo.points !== undefined) {
          this.setData({
            'userInfo.points': app.globalData.userInfo.points
          })
        }
      } catch (error) {
        console.error('刷新积分失败:', error)
      }
    }
  },

  // 刷新用户信息
  async refreshUserInfo() {
    const app = getApp()
    if (app.globalData.userInfo && app.globalData.userInfo._id) {
      try {
        console.log('尝试刷新用户信息...')
        
        // 从云数据库获取最新用户信息
        const { userService } = require('../../utils/cloud.js')
        const result = await userService.getUserById(app.globalData.userInfo._id)
        
        if (result.success && result.data) {
          const latestUserInfo = result.data
          console.log('从云数据库获取的最新用户信息:', latestUserInfo)
          
          // 更新全局数据
          app.globalData.userInfo = {
            ...app.globalData.userInfo,
            ...latestUserInfo
          }
          
          // 更新页面数据
          const userInfo = {
            ...latestUserInfo,
            points: latestUserInfo.points || 0,
            orders: app.globalData.orders ? app.globalData.orders.length : 0
          }
          
          this.setData({
            userInfo: userInfo,
            currentRole: userInfo.role || app.globalData.userRole || 'member'
          })
          
          console.log('用户信息刷新成功')
        }
      } catch (error) {
        console.error('刷新用户信息失败:', error)
      }
    }
  },

  // 进入厨师工作台
  goToChefDashboard() {
    wx.redirectTo({
      url: '/pages/chef/dashboard/dashboard' // Changed from orders to dashboard
    })
  },

  // 编辑个人信息相关方法
  editUserInfo() {
    console.log('打开编辑弹窗，当前用户信息:', this.data.userInfo)
    
    // 确保有默认值
    const defaultNickname = this.data.userInfo.nickname || '用户昵称'
    const defaultAvatarUrl = this.data.userInfo.avatar || ''
    
    console.log('设置临时数据:', { defaultNickname, defaultAvatarUrl })
    
    // 先设置数据，再显示弹框，避免位置偏移
    this.setData({
      tempNickname: defaultNickname,
      tempAvatarUrl: defaultAvatarUrl
    }, () => {
      // 直接显示弹框，不使用延迟
      this.setData({
        showEditModal: true
      })
      // 弹框显示后添加动画效果
      setTimeout(() => {
        this.setData({
          modalStable: true
        })
      }, 50)
    })
  },

  closeEditModal() {
    this.setData({
      showEditModal: false,
      modalStable: false
    })
  },

  // 阻止事件冒泡
  stopPropagation() {
    // 空函数，仅用于阻止事件冒泡
  },

  onNicknameInput(e) {
    const value = e.detail.value
    this.setData({
      tempNickname: value
    })
  },

  chooseAvatar() {
    wx.chooseImage({
      count: 1,
      sizeType: ['compressed'],
      sourceType: ['album', 'camera'],
      success: (res) => {
        const tempFilePath = res.tempFilePaths[0]
        this.setData({
          tempAvatarUrl: tempFilePath
        })
      }
    })
  },

  async saveUserInfo() {
    const { tempNickname, tempAvatarUrl } = this.data
    
    if (!tempNickname.trim()) {
      wx.showToast({
        title: '请输入用户名',
        icon: 'none'
      })
      return
    }

    wx.showLoading({
      title: '保存中...'
    })

    try {
      // 如果有新头像，先上传到云存储
      let avatarUrl = this.data.userInfo.avatar
      if (tempAvatarUrl && tempAvatarUrl !== this.data.userInfo.avatar) {
        console.log('开始上传新头像...')
        avatarUrl = await this.uploadAvatar(tempAvatarUrl)
        console.log('头像上传成功:', avatarUrl)
      }

      console.log('开始更新云数据库...')
      
      // 更新云数据库中的用户信息
      await this.updateUserInfoInCloud({
        nickname: tempNickname.trim(),
        avatar: avatarUrl
      })

      console.log('云数据库更新成功，开始更新本地数据...')

      // 更新本地数据
      this.setData({
        'userInfo.nickname': tempNickname.trim(),
        'userInfo.avatar': avatarUrl,
        showEditModal: false
      })

      // 更新全局数据
      const app = getApp()
      if (app.globalData.userInfo) {
        app.globalData.userInfo.nickname = tempNickname.trim()
        app.globalData.userInfo.avatar = avatarUrl
        console.log('全局数据更新成功')
      }

      // 更新本地存储
      const localUserInfo = wx.getStorageSync('userInfo') || {}
      const updatedUserInfo = {
        ...localUserInfo,
        nickname: tempNickname.trim(),
        avatar: avatarUrl
      }
      wx.setStorageSync('userInfo', updatedUserInfo)
      console.log('本地存储更新成功')

      wx.hideLoading()
      wx.showToast({
        title: '保存成功',
        icon: 'success'
      })

      console.log('用户信息保存完成')

    } catch (error) {
      wx.hideLoading()
      console.error('保存用户信息失败:', error)
      
      let errorMessage = '保存失败'
      if (error.message) {
        errorMessage = error.message
      } else if (error.errMsg) {
        errorMessage = error.errMsg
      }
      
      wx.showToast({
        title: errorMessage,
        icon: 'none',
        duration: 3000
      })
    }
  },

  async uploadAvatar(filePath) {
    return new Promise((resolve, reject) => {
      console.log('开始上传头像，文件路径:', filePath)
      
      const cloudPath = `avatars/${Date.now()}-${Math.random().toString(36).substr(2, 9)}.jpg`
      console.log('云存储路径:', cloudPath)
      
      wx.cloud.uploadFile({
        cloudPath: cloudPath,
        filePath: filePath,
        success: (res) => {
          console.log('头像上传成功:', res)
          resolve(res.fileID)
        },
        fail: (error) => {
          console.error('头像上传失败:', error)
          reject(new Error(`头像上传失败: ${error.errMsg || '未知错误'}`))
        }
      })
    })
  },

  async updateUserInfoInCloud(userData) {
    const app = getApp()
    const db = wx.cloud.database()
    
    try {
      // 检查用户ID是否存在
      if (!app.globalData.userInfo || !app.globalData.userInfo._id) {
        console.error('用户ID不存在，无法更新云数据库')
        throw new Error('用户ID不存在')
      }

      console.log('开始更新云数据库，用户ID:', app.globalData.userInfo._id)
      
      // 更新用户集合中的信息
      const result = await db.collection('users').doc(app.globalData.userInfo._id).update({
        data: {
          nickname: userData.nickname,
          avatar: userData.avatar,
          updateTime: new Date()
        }
      })
      
      console.log('云数据库更新成功:', result)
      return result
      
    } catch (error) {
      console.error('更新云数据库失败:', error)
      throw error
        }
  },

  // 获取角色显示名称
  getRoleDisplayName(role) {
    const roleMap = {
      'member': '家庭成员',
      'chef': '厨师',
      'admin': '管理员'
    }
    return roleMap[role] || '家庭成员'
  },

  // 确保用户信息安全的辅助方法
  ensureSafeUserInfo(userInfo) {
    console.log('ensureSafeUserInfo - 输入:', userInfo)
    
    const safeInfo = {
      nickName: userInfo && userInfo.nickname ? String(userInfo.nickname) : '用户昵称',
      avatarUrl: userInfo && (userInfo.avatarUrl || userInfo.avatar) ? String(userInfo.avatarUrl || userInfo.avatar) : '',
      role: userInfo && userInfo.role ? String(userInfo.role) : 'member'
    }
    
    console.log('ensureSafeUserInfo - 输出:', safeInfo)
    return safeInfo
  },



  // 跳转到订单页面
  goToOrders() {
    wx.switchTab({ url: '/pages/orders/orders' })
  },

  // 跳转到收藏页面
  goToFavorites() {
    wx.showToast({ title: '收藏功能开发中', icon: 'none' })
  },

  // 跳转到地址管理页面
  goToAddress() {
    wx.showToast({ title: '地址管理功能开发中', icon: 'none' })
  },

  // 跳转到隐私设置
  goToPrivacy() {
    wx.navigateTo({
      url: '/pages/profile/privacy/privacy'
    })
  },

  // 跳转到关于我们
  goToAbout() {
    wx.navigateTo({
      url: '/pages/profile/about/about'
    })
  },

  // 去登录
  goToLogin() {
    const app = getApp()
    app.showLoginModal()
  },

  // 关闭全局登录弹框
  onGlobalLoginModalClose() {
    this.setData({
      showGlobalLoginModal: false
    })
    // 同步全局状态
    const app = getApp()
    app.globalData.showGlobalLoginModal = false
  },

  // 全局登录成功回调
  onGlobalLoginSuccess() {
    console.log('全局登录成功，刷新页面数据')
    // 刷新用户信息
    this.onShow()
  },

  // 设置事件监听
  setupEventListeners() {
    const app = getApp()
    if (app.globalData.eventBus) {
      // 监听全局登录弹框显示事件
      app.globalData.eventBus.on('showGlobalLoginModal', () => {
        this.setData({
          showGlobalLoginModal: true
        })
      })
    }
  },

  // 清理事件监听
  onUnload() {
    const app = getApp()
    if (app.globalData.eventBus) {
      app.globalData.eventBus.off('showGlobalLoginModal')
    }
  },

  // 退出登录
  logout() {
    wx.showModal({
      title: '确认退出',
      content: '确定要退出登录吗？',
      success: (res) => {
        if (res.confirm) {
          // 清除用户信息
          app.globalData.userInfo = null
          app.globalData.userRole = 'member'
          app.globalData.isLoggedIn = false
          
          // 清除本地存储
          wx.removeStorageSync('userInfo')
          wx.removeStorageSync('userRole')
          wx.removeStorageSync('isLoggedIn')
          wx.removeStorageSync('familyInfo')
          
          wx.showToast({ title: '已退出登录', icon: 'success' })
          
          // 跳转到首页
          setTimeout(() => {
            wx.reLaunch({ url: '/pages/index/index' })
          }, 1000)
        }
      }
    })
  }
}) 